#include <iostream>
#include <sstream>
#include <fstream>
#include "controller.h"
#include "car.h"
using namespace std;

Controller::Controller(){};

vector<string> Controller::readFile(string fileName){
    std::ifstream file(fileName); // 替换"example.txt"为你的文件名  
    std::string line;  
    std::vector<std::string> lines;  
  
    if (file.is_open()) {  
        while (getline(file, line)) { // 使用getline()函数按行读取  
            if (!line.empty() && line.back() == '\n') {  
                line.pop_back();  
            } 
            lines.push_back(line); // 将读取的行添加到vector中  
        }  
        file.close();  
    } else {  
        std::cout << "Unable to open file";  
    }  
    return lines;
}



void Controller::display(std::string fileName){
    vector<string> lines = readFile(fileName);
    if(lines.size()<1){
        cout << "信息为空！" << endl;
        return;
    }
    int index = 0;
    
    while (true)
    {
        std::istringstream iss(lines[index]);  
        std::string part;  

        // 使用逗号作为分隔符  
        while (std::getline(iss, part, ',')) {  
            std::cout << part << std::endl; // 输出每个部分并换行  
        } 
        std::string command;
        cin >> command;
        if(command=="q"){return;}
        if(command=="n" && index < int(lines.size())-1){
            ++index;
        }
        if(command=="p" && index > 0){
            --index;
        }
        
    }
}



void Controller::recordCar(){

    while (true)
    {
        std::cout<<"请分别输入小车ID和底盘ID，输入‘q’退出录入：" << std::endl;
        std::string carId, chassisId;
        std::cin >> carId ;
        if(carId=="q"){return;}
        cin>> chassisId;
        if(carId.size()==16 && chassisId.size()==8){
            cars.push_back(SmartCar(carId, chassisId));
        }else{
            cout << "小车ID为cqusn打头的16位数字+字母，底盘ID为dp打头的8位数字+字母，请重新输入：" << endl;
        }
        

    }
    

}

void Controller::allocationCar(){
    
    while (true)
    {
        cout << "请输入小车Id和学生学号来分配小车，输入‘q’退出：" << endl;
        string carId, studentId;
        cin  >> carId;
        if(carId=="q"){return;}
        cin >> studentId;
        bool foundStudent=false, foundCar=false;
        vector<string> students = readFile(TATH_STUDENT);
        SmartCar tempCar;
        for (const auto& student : students) {  
            string stdId;
            std::istringstream iss(student);  
            std::string part;   
            while (std::getline(iss, part, ':')) {  
                //std::cout << part << std::endl; // 输出每个部分并换行  
                stdId = part;
            } 
            // cout << stdId<<endl;
            if (stdId==studentId) {  
                foundStudent=true;  
                break;
            } 
        } 
        for (const auto& car:cars){
            if(car.getCarId()==carId){
                foundCar=true;
                tempCar=car;
            }
        }
        if (foundCar==true && foundStudent==true){
            std::ofstream file(TATH_CAR, std::ios::app);  
            if (file.is_open()) {  

                file << "小车编号:" << tempCar.getCarId() << ",底盘  编号:" << tempCar.getChassisId()  << ",所属学生：" << studentId << 
                ",型号：SCOUT MINI,轴距：451mm,轮距：490mm,最小离地间隙：115mm,最小转弯半径：0m,驱动形式：四轮四驱,最大行程：10KM,轮胎（4个）,型号：公路轮、麦克纳姆轮,尺寸：175mm,AGX套件（1个）,型号：AGX Xavier,AI：32 TOPS,CUDA核心：512,Tensor CORE：64,显存：32G,存储：32G,双目摄像头（1个）,型号：RealSense D435i,摄像头：D430,RGB帧分辨率：1920*1080,RGB帧率：30,FOV：87*58,深度帧率：90,多线激光雷达（1个）,型号：RS-Helios-16p,通道数：16,测试范围：100m,功耗：8W,轴陀螺仪（1个）,型号：CH110,厂家：NXP,液晶显示屏（1个）,尺寸：11.6,型号：super,电池模块（1个）,参数：24V/15Ah,对外供电：24V,充电时长：2H"<<endl;  
                
                file.close();  
                cout << "分配成功！" << endl;
            } else {  
                cout << "Unable to open file";  
            }  
        }else{
            cout << "找不到该小车或学生！" <<endl;
        }
        /* code */
    }
    
   
}

void Controller::displayStudentInformation(){
    display(TATH_STUDENT);
}

void Controller::displayCarInformation(){
    display(TATH_CAR);
}